package GUI;

import modelo.gestionCarta.*;

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JButton;
import java.awt.FlowLayout;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingConstants;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.BorderFactory;
import javax.swing.border.BevelBorder;
import javax.swing.border.TitledBorder;
import java.awt.Font;
import java.awt.Color;
import javax.swing.JTextField;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.DefaultListModel;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import javax.swing.JDialog;
import java.lang.Float;
import javax.swing.ListSelectionModel;

import aplicaciones.Main;

public class CartaGrafica {

	private JFrame frameCarta = null; // @jve:decl-index=0:visual-constraint="7,7"

	private JPanel panelCarta = null;

	private JPanel panelSecciones = null;

	private JPanel botoneraSeccion = null;

	private JLabel labelSeccion = null;

	private JButton botonAgregarSec = null;

	private JButton botonEliminarSec = null;

	private JList listaSecciones = null;

	private DefaultListModel modeloSecciones = new DefaultListModel();

	private JLabel labelSeccion2 = null;

	private JPanel panelModSec = null;

	private JScrollPane scrollListaSec = null;

	private JButton botonModSec = null;

	private JPanel panelProductos = null;

	private JPanel botoneraProducto = null;

	private JLabel labelProducto = null;

	private JButton botonAgregarProd = null;

	private JButton botonEliminarProd = null;

	private JPanel panelModProd = null;

	private JLabel labelProducto2 = null;

	private JTextField textSeccion = null;

	private JTextField textProducto = null;

	private JButton botonModProd = null;

	private JScrollPane scrollListaProd = null;

	private ListaProductos listaProductos = new ListaProductos();

	private JTable tablaProductos = null;

	private JPanel panelBotonera = null;

	private JPanel panelBox = null;

	private JButton botonGuardar = null;

	private JButton botonSalir = null;

	private JFrame framePpal = null;

	private JLabel labelPrecio = null;

	private JTextField textPrecio = null;

	private JButton botonImprimir = null;

	private JDialog dialogoNuevoProd = null; // @jve:decl-index=0:visual-constraint="257,596"

	private JPanel panelNuevoProd = null;

	private JLabel labelNProd = null;

	private JTextField textNProd = null;

	private JLabel labelPNProd = null;

	private JLabel simbEuro = null;

	private JButton botonNProd = null;

	private JButton botonCNProd = null;

	private JTextField textPNProd = null;

	private Carta cartaLocal;

	public CartaGrafica(JFrame sc)
	{
		try
		{
			cartaLocal = Main.m_Restaurante.getCarta();
		} catch (Exception e)
		{
			JOptionPane.showMessageDialog(null, "No se encuentra la carta");
			e.printStackTrace();
		}

		if (cartaLocal == null)
			cartaLocal = new Carta(0, "");

		JFrame frameCG = getFrameCarta();
		frameCG.setVisible(true);
		framePpal = sc;
		framePpal.setEnabled(false);

	}

	/**
	 * This method initializes frameCarta
	 * 
	 * @return javax.swing.JFrame
	 */
	private JFrame getFrameCarta()
	{
		if (frameCarta == null)
		{
			frameCarta = new JFrame();
			frameCarta.setPreferredSize(new Dimension(886, 573));
			frameCarta.setMinimumSize(new Dimension(886, 573));

			frameCarta.setSize(new Dimension(886, 573));
			frameCarta.setTitle("Menú Carta");
			frameCarta.setResizable(false);
			frameCarta.setContentPane(getPanelCarta());
			frameCarta.addWindowListener(new java.awt.event.WindowAdapter() {
				public void windowClosing(java.awt.event.WindowEvent e)
				{
					framePpal.setEnabled(true);
				}
			});
			frameCarta.setLocationRelativeTo(null);
		}
		return frameCarta;
	}

	/**
	 * This method initializes panelCarta
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelCarta()
	{
		if (panelCarta == null)
		{
			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
			gridBagConstraints3.insets = new Insets(0, 0, 0, 0);
			gridBagConstraints3.gridy = 0;
			gridBagConstraints3.ipadx = 10;
			gridBagConstraints3.ipady = 150;
			gridBagConstraints3.gridwidth = 0;
			gridBagConstraints3.gridheight = 0;
			gridBagConstraints3.anchor = GridBagConstraints.NORTH;
			gridBagConstraints3.gridx = 2;
			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
			gridBagConstraints2.insets = new Insets(0, 6, 0, 7);
			gridBagConstraints2.gridy = 0;
			gridBagConstraints2.ipadx = 15;
			gridBagConstraints2.ipady = 400;
			gridBagConstraints2.fill = GridBagConstraints.VERTICAL;
			gridBagConstraints2.anchor = GridBagConstraints.NORTHWEST;
			gridBagConstraints2.gridx = 1;
			GridBagConstraints gridBagConstraints11 = new GridBagConstraints();
			gridBagConstraints11.insets = new Insets(0, 0, 0, 7);
			gridBagConstraints11.gridy = 0;
			gridBagConstraints11.ipadx = 34;
			gridBagConstraints11.ipady = 412;
			gridBagConstraints11.fill = GridBagConstraints.NONE;
			gridBagConstraints11.anchor = GridBagConstraints.NORTHWEST;
			gridBagConstraints11.gridheight = 1;
			gridBagConstraints11.gridx = 0;
			panelCarta = new JPanel();
			panelCarta.setLayout(new GridBagLayout());
			panelCarta.setPreferredSize(new Dimension(0, 0));
			panelCarta.add(getPanelSecciones(), gridBagConstraints11);
			panelCarta.add(getPanelProductos(), gridBagConstraints2);
			panelCarta.add(getPanelBotonera(), gridBagConstraints3);
		}
		return panelCarta;
	}

	/**
	 * This method initializes panelSecciones
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelSecciones()
	{
		if (panelSecciones == null)
		{
			BorderLayout borderLayout1 = new BorderLayout();
			borderLayout1.setVgap(0);
			borderLayout1.setHgap(0);
			labelSeccion2 = new JLabel();
			labelSeccion2.setText("Nombre Sección:");
			panelSecciones = new JPanel();
			panelSecciones.setLayout(borderLayout1);
			panelSecciones.setPreferredSize(new Dimension(400, 100));
			panelSecciones.add(getBotoneraSeccion(), BorderLayout.NORTH);
			panelSecciones.add(getPanelModSec(), BorderLayout.SOUTH);
			panelSecciones.add(getScrollListaSec(), BorderLayout.CENTER);
		}
		return panelSecciones;
	}

	/**
	 * This method initializes botoneraSeccion
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getBotoneraSeccion()
	{
		if (botoneraSeccion == null)
		{
			FlowLayout flowLayout = new FlowLayout();
			flowLayout.setVgap(5);
			flowLayout.setAlignment(java.awt.FlowLayout.LEFT);
			flowLayout.setHgap(7);
			labelSeccion = new JLabel();
			labelSeccion.setText("Secciones:");
			labelSeccion.setVerticalTextPosition(SwingConstants.BOTTOM);
			labelSeccion.setVerticalAlignment(SwingConstants.BOTTOM);
			botoneraSeccion = new JPanel();
			botoneraSeccion.setPreferredSize(new Dimension(351, 32));
			botoneraSeccion.setLayout(flowLayout);
			botoneraSeccion.add(labelSeccion, null);
			botoneraSeccion.add(getBotonAgregarSec(), null);
			botoneraSeccion.add(getBotonEliminarSec(), null);
		}
		return botoneraSeccion;
	}

	/**
	 * This method initializes botonAgregarSec
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBotonAgregarSec()
	{
		if (botonAgregarSec == null)
		{
			botonAgregarSec = new JButton();
			botonAgregarSec.setText("Nueva Sección...");
			botonAgregarSec.setIcon(new ImageIcon(getClass().getResource(
					"/iconos/table_add.png")));
			botonAgregarSec.setPreferredSize(new Dimension(130, 20));
			botonAgregarSec
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e)
						{

							String s = (String) JOptionPane.showInputDialog(
									null, "Introduzca la nueva sección:",
									"Nueva Sección",
									JOptionPane.QUESTION_MESSAGE);

							if ((s != null) && (s.length() > 0))
							{
								// CORRECTO
								try
								{
									// Agregar a la carta
									Seccion nSec = new Seccion(s);
									cartaLocal.agregarSeccion(nSec);

									modeloSecciones.addElement(s);
									listaSecciones.setSelectedIndex(-1);

									listaSecciones.updateUI();

								} catch (Exception eout)
								{
									JOptionPane.showMessageDialog(null,
											"Error al agregar seccion");
								}

							} else if (s != null)
							{
								JOptionPane
										.showMessageDialog(
												null,
												"Hay que introducir un nombre para la nueva sección. Inténtelo de nuevo",
												"Error: nombre incorrecto",
												JOptionPane.ERROR_MESSAGE);
							}

							textSeccion.setText(null);
							textSeccion.setEnabled(false);
							botonModSec.setEnabled(false);
							botonEliminarSec.setEnabled(false);

							listaSecciones.repaint();

						}
					});
		}
		return botonAgregarSec;
	}

	/**
	 * This method initializes botonEliminarSec
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBotonEliminarSec()
	{
		if (botonEliminarSec == null)
		{
			botonEliminarSec = new JButton();
			botonEliminarSec.setText("Eliminar Sección");
			botonEliminarSec.setIcon(new ImageIcon(getClass().getResource(
					"/iconos/table_delete.png")));
			botonEliminarSec.setPreferredSize(new Dimension(140, 20));
			botonEliminarSec.setEnabled(false);
			botonEliminarSec
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e)
						{
							int indice = listaSecciones.getSelectedIndex();
							int resp = JOptionPane.showConfirmDialog(null,
									"¿De verdad quiere eliminar la sección \""
											+ modeloSecciones
													.getElementAt(indice)
											+ "\" ?", "Eliminar Sección",
									JOptionPane.YES_NO_OPTION);

							if (resp == 0)
							{
								try
								{
									cartaLocal.eliminarSeccion(indice);
									modeloSecciones.remove(indice);

								} catch (Exception eout)
								{
								}

								if (listaSecciones.getSelectedIndex() == -1
										|| modeloSecciones.getSize() == 0)
								{
									textSeccion.setText(null);
									textSeccion.setEnabled(false);
									botonModSec.setEnabled(false);
									botonEliminarSec.setEnabled(false);
									botonAgregarProd.setEnabled(false);
									listaSecciones.setSelectedIndex(-1);
									listaSecciones.repaint();

									for (int i = listaProductos.getRowCount() - 1; i >= 0; i--)
									{

										listaProductos.removeRow(i);
									}

									tablaProductos.repaint();
								}

							}
						}
					});
		}
		return botonEliminarSec;
	}

	/**
	 * This method initializes listaSecciones
	 * 
	 * @return javax.swing.JList
	 */
	private JList getListaSecciones()
	{
		if (listaSecciones == null)
		{
			listaSecciones = new JList(modeloSecciones);

			Carta c = cartaLocal;
			listaSecciones
					.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

			Seccion[] m_sec = null;

			if (cartaLocal != null)
			{
				m_sec = c.getSecciones();
			} else
				c = new Carta(0, null);

			for (int i = 0; m_sec != null && i < m_sec.length; i++)
			{
				modeloSecciones.addElement(m_sec[i].getNombreSeccion());
			}

			listaSecciones.addMouseListener(new java.awt.event.MouseAdapter() {
				public void mouseClicked(java.awt.event.MouseEvent e)
				{
					if (listaSecciones.getSelectedIndex() != -1)
					{
						botonEliminarSec.setEnabled(true);
						botonModSec.setEnabled(true);
						textSeccion.setEnabled(true);

						botonAgregarProd.setEnabled(true);
						textSeccion
								.setText((String) modeloSecciones
										.getElementAt(listaSecciones
												.getSelectedIndex()));

						for (int i = listaProductos.getRowCount() - 1; i >= 0; listaProductos
								.removeRow(i--))
							;

						// Aquí cargamos todo la lista de productos de una
						// seccion

						Seccion s = cartaLocal
								.buscarSeccion((String) modeloSecciones
										.getElementAt(listaSecciones
												.getSelectedIndex()));
						Producto p[] = s.getProductos();

						for (int i = 0; i < p.length; i++)
						{
							String linea[] = { p[i].consultarNombreProducto(),
									Float.toString(p[i].consultarPrecio()) };
							linea[1] += " €";
							listaProductos.insertRow(i, linea);
						}

					} else
					{
						botonAgregarProd.setEnabled(false);

						for (int i = 0; i < listaProductos.getRowCount(); i++)
							listaProductos.removeRow(i);

						tablaProductos.repaint();
					}
				}
			});
		}
		return listaSecciones;
	}

	/**
	 * This method initializes panelModSec
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelModSec()
	{
		if (panelModSec == null)
		{
			FlowLayout flowLayout1 = new FlowLayout();
			flowLayout1.setAlignment(java.awt.FlowLayout.LEFT);
			flowLayout1.setHgap(13);
			flowLayout1.setVgap(2);

			flowLayout1.setHgap(5);
			flowLayout1.setVgap(5);
			panelModSec = new JPanel();
			panelModSec.setLayout(flowLayout1);
			panelModSec.setBorder(BorderFactory.createTitledBorder(null,
					"Modificar Sección", TitledBorder.DEFAULT_JUSTIFICATION,
					TitledBorder.DEFAULT_POSITION, new Font("Dialog",
							Font.BOLD, 12), new Color(51, 51, 51)));
			panelModSec.setPreferredSize(new Dimension(393, 80));
			panelModSec.setEnabled(true);
			panelModSec.add(labelSeccion2, null);
			panelModSec.add(getTextSeccion(), null);
			panelModSec.add(getBotonModSec(), null);
		}
		return panelModSec;
	}

	/**
	 * This method initializes scrollListaSec
	 * 
	 * @return javax.swing.JScrollPane
	 */
	private JScrollPane getScrollListaSec()
	{
		if (scrollListaSec == null)
		{
			scrollListaSec = new JScrollPane();
			scrollListaSec.setBorder(BorderFactory
					.createBevelBorder(BevelBorder.LOWERED));
			scrollListaSec.setPreferredSize(new Dimension(220, 100));
			scrollListaSec.setViewportView(getListaSecciones());
		}
		return scrollListaSec;
	}

	/**
	 * This method initializes botonModSec
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBotonModSec()
	{
		if (botonModSec == null)
		{
			botonModSec = new JButton();
			botonModSec.setText("Modificar");
			botonModSec.setPreferredSize(new Dimension(87, 20));
			botonModSec.setEnabled(false);
			botonModSec.setIcon(new ImageIcon(getClass().getResource(
					"/iconos/table_edit.png")));
			botonModSec.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					modeloSecciones.setElementAt(textSeccion.getText(),
							listaSecciones.getSelectedIndex());
					cartaLocal.getSecciones()[listaSecciones.getSelectedIndex()]
							.setNombreSeccion(textSeccion.getText());

				}
			});
		}
		return botonModSec;
	}

	/**
	 * This method initializes panelProductos
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelProductos()
	{
		if (panelProductos == null)
		{
			panelProductos = new JPanel();
			panelProductos.setLayout(new BorderLayout());
			panelProductos.setPreferredSize(new Dimension(400, 182));
			panelProductos.add(getBotoneraProducto(), BorderLayout.NORTH);
			panelProductos.add(getPanelModProd(), BorderLayout.SOUTH);
			panelProductos.add(getScrollListaProd(), BorderLayout.CENTER);
		}
		return panelProductos;
	}

	/**
	 * This method initializes botoneraProducto
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getBotoneraProducto()
	{
		if (botoneraProducto == null)
		{
			FlowLayout flowLayout2 = new FlowLayout();
			flowLayout2.setAlignment(java.awt.FlowLayout.LEFT);
			flowLayout2.setHgap(7);
			labelProducto = new JLabel();
			labelProducto.setText("Productos:");
			botoneraProducto = new JPanel();
			botoneraProducto.setPreferredSize(new Dimension(380, 30));
			botoneraProducto.setLayout(flowLayout2);
			botoneraProducto.add(labelProducto, null);
			botoneraProducto.add(getBotonAgregarProd(), null);
			botoneraProducto.add(getBotonEliminarProd(), null);
		}
		return botoneraProducto;
	}

	/**
	 * This method initializes botonAgregarProd
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBotonAgregarProd()
	{
		if (botonAgregarProd == null)
		{
			botonAgregarProd = new JButton();
			botonAgregarProd.setText("Nuevo Producto...");
			botonAgregarProd.setEnabled(false);
			botonAgregarProd.setPreferredSize(new Dimension(140, 20));
			botonAgregarProd.setIcon(new ImageIcon(getClass().getResource(
					"/iconos/table_add.png")));
			botonAgregarProd
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e)
						{
							if (panelNuevoProd != null)
							{
								String tituloBorde = "Añadir a la sección \""
										+ textSeccion.getText() + "\"";
								panelNuevoProd.setBorder(BorderFactory
										.createTitledBorder(null, tituloBorde,
												TitledBorder.CENTER,
												TitledBorder.DEFAULT_POSITION,
												new Font("Dialog", Font.BOLD,
														12), new Color(51, 51,
														51)));
							}

							getDialogoNuevoProd().setVisible(true);

						}
					});
		}
		return botonAgregarProd;
	}

	/**
	 * This method initializes botonEliminarProd
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBotonEliminarProd()
	{
		if (botonEliminarProd == null)
		{
			botonEliminarProd = new JButton();
			botonEliminarProd.setText("Eliminar Producto");
			botonEliminarProd.setEnabled(false);
			botonEliminarProd.setPreferredSize(new Dimension(140, 20));

			botonEliminarProd.setIcon(new ImageIcon(getClass().getResource(
					"/iconos/Trashcan.png")));

			botonEliminarProd
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e)
						{
							int resp = JOptionPane.showConfirmDialog(null,
									"¿De verdad quiere eliminar el producto \""
											+ listaProductos.getValueAt(
													tablaProductos
															.getSelectedRow(),
													0) + "\" ?",
									"Eliminar Sección",
									JOptionPane.YES_NO_OPTION);

							if (resp == 0)
							{

								Seccion s = cartaLocal.getSecciones()[listaSecciones
										.getSelectedIndex()];

								s.eliminarProducto(new Producto(0, 0,
										textProducto.getText(), ""));

								listaProductos.removeRow(tablaProductos
										.getSelectedRow());
								textProducto.setText("");
								textPrecio.setText("");
								textProducto.setEnabled(false);
								textPrecio.setEnabled(false);
								botonModProd.setEnabled(false);
								botonEliminarProd.setEnabled(false);

							}

						}
					});
		}
		return botonEliminarProd;
	}

	/**
	 * This method initializes panelModProd
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelModProd()
	{
		if (panelModProd == null)
		{
			FlowLayout flowLayout = new FlowLayout();
			flowLayout.setAlignment(java.awt.FlowLayout.LEFT);
			FlowLayout flowLayout12 = new FlowLayout();
			flowLayout12.setAlignment(java.awt.FlowLayout.LEFT);
			labelPrecio = new JLabel();
			labelPrecio.setText("Precio  Producto:  ");
			FlowLayout flowLayout3 = new FlowLayout();
			flowLayout3.setHgap(13);
			flowLayout3.setAlignment(java.awt.FlowLayout.LEFT);
			flowLayout3.setVgap(2);
			labelProducto2 = new JLabel();
			labelProducto2.setText("Nombre Producto:");
			panelModProd = new JPanel();
			panelModProd.setLayout(flowLayout12);
			panelModProd.setPreferredSize(new Dimension(450, 80));
			panelModProd.setBorder(BorderFactory.createTitledBorder(null,
					"Modificar Producto", TitledBorder.DEFAULT_JUSTIFICATION,
					TitledBorder.DEFAULT_POSITION, new Font("Dialog",
							Font.BOLD, 12), new Color(51, 51, 51)));
			panelModProd.add(labelProducto2, null);
			panelModProd.add(getTextProducto(), null);
			panelModProd.add(labelPrecio, null);
			panelModProd.add(getTextPrecio(), null);
			panelModProd.add(getBotonModProd(), null);
		}
		return panelModProd;
	}

	/**
	 * This method initializes textSeccion
	 * 
	 * @return javax.swing.JTextField
	 */
	private JTextField getTextSeccion()
	{
		if (textSeccion == null)
		{
			textSeccion = new JTextField();
			textSeccion.setColumns(13);
			textSeccion.setEnabled(false);
		}
		return textSeccion;
	}

	/**
	 * This method initializes textProducto
	 * 
	 * @return javax.swing.JTextField
	 */
	private JTextField getTextProducto()
	{
		if (textProducto == null)
		{
			textProducto = new JTextField();
			textProducto.setColumns(13);
			textProducto.setEnabled(false);
		}
		return textProducto;
	}

	/**
	 * This method initializes botonModProd
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBotonModProd()
	{
		if (botonModProd == null)
		{
			botonModProd = new JButton();
			botonModProd.setText("Modificar");
			botonModProd.setEnabled(false);
			botonModProd.setPreferredSize(new Dimension(87, 20));
			botonModProd.setVisible(true);
			botonModProd.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					String prod[] = new String[2];
					prod[0] = textProducto.getText();
					prod[1] = textPrecio.getText();

					if ((prod[0] != null) && (prod[0].length() > 0))
					{
						// CORRECTO

						float precio;
						try
						{
							precio = Float.parseFloat(prod[1]);

						} catch (NumberFormatException ex)
						{
							precio = -1.0f;
						}

						if ((prod[1] != null) && (prod[1].length() > 0)
								&& (precio > 0))
						{

							String n_Producto = (String) listaProductos
									.getValueAt(
											tablaProductos.getSelectedRow(), 0);

							listaProductos.setValueAt(textProducto.getText(),
									tablaProductos.getSelectedRow(), 0);
							listaProductos.setValueAt(textPrecio.getText()
									+ " €", tablaProductos.getSelectedRow(), 1);

							cartaLocal.getSecciones()[listaSecciones
									.getSelectedIndex()].buscarProducto(
									n_Producto).setPrecio(
									new Float(textPrecio.getText()));

							cartaLocal.getSecciones()[listaSecciones
									.getSelectedIndex()].buscarProducto(
									n_Producto).setNombre(
									textProducto.getText());
						} else if (prod[1] != null || precio < 0)
						{
							JOptionPane
									.showMessageDialog(
											null,
											"Se ha omitido el precio del producto. Introdúzcalo",
											"Error", JOptionPane.ERROR_MESSAGE);
						}

					} else if (prod[0] != null)
					{
						JOptionPane
								.showMessageDialog(
										null,
										"Se ha omitido el nombre del producto. Introdúzcalo",
										"Error", JOptionPane.ERROR_MESSAGE);
					}
				}
			});
		}
		return botonModProd;
	}

	/**
	 * This method initializes scrollListaProd
	 * 
	 * @return javax.swing.JScrollPane
	 */
	private JScrollPane getScrollListaProd()
	{
		if (scrollListaProd == null)
		{
			scrollListaProd = new JScrollPane();
			scrollListaProd.setBorder(BorderFactory
					.createBevelBorder(BevelBorder.LOWERED));
			scrollListaProd.setViewportView(getTablaProductos());
		}
		return scrollListaProd;
	}

	/**
	 * This method initializes tablaProductos
	 * 
	 * @return javax.swing.JTable
	 */
	private JTable getTablaProductos()
	{
		if (tablaProductos == null)
		{
			tablaProductos = new JTable();
			tablaProductos
					.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			tablaProductos.setShowVerticalLines(true);
			tablaProductos.setRowSelectionAllowed(true);
			tablaProductos.setModel(listaProductos);

			listaProductos.addColumn("Producto");
			listaProductos.addColumn("Precio");

			tablaProductos.addMouseListener(new java.awt.event.MouseAdapter() {
				public void mouseClicked(java.awt.event.MouseEvent e)
				{
					botonEliminarProd.setEnabled(true);
					botonModProd.setEnabled(true);
					textProducto.setEnabled(true);
					textPrecio.setEnabled(true);
					int fila = tablaProductos.getSelectedRow();
					String nombreProd = (String) tablaProductos.getValueAt(
							fila, 0);
					String precio = ((String) tablaProductos
							.getValueAt(fila, 1)).replace("€", "");

					textProducto.setText(nombreProd);
					textPrecio.setText(precio);
				}
			});

		}
		return tablaProductos;
	}

	/**
	 * This method initializes panelBotonera
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelBotonera()
	{
		if (panelBotonera == null)
		{
			BorderLayout borderLayout = new BorderLayout();
			borderLayout.setHgap(0);
			panelBotonera = new JPanel();
			panelBotonera.setLayout(borderLayout);
			panelBotonera.setPreferredSize(new Dimension(0, 0));
			panelBotonera.add(getPanelBox(), BorderLayout.CENTER);
		}
		return panelBotonera;
	}

	/**
	 * This method initializes panelBox
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelBox()
	{
		if (panelBox == null)
		{
			GridBagConstraints gridBagConstraints12 = new GridBagConstraints();
			gridBagConstraints12.gridx = 2;
			gridBagConstraints12.insets = new Insets(40, 0, 0, 0);
			gridBagConstraints12.ipady = 20;
			gridBagConstraints12.gridwidth = 1;
			gridBagConstraints12.ipadx = 8;
			gridBagConstraints12.anchor = GridBagConstraints.WEST;
			gridBagConstraints12.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints12.gridy = 5;
			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
			gridBagConstraints1.gridx = 2;
			gridBagConstraints1.ipadx = 9;
			gridBagConstraints1.ipady = 20;
			gridBagConstraints1.anchor = GridBagConstraints.WEST;
			gridBagConstraints1.gridwidth = 2;
			gridBagConstraints1.insets = new Insets(3, 0, 5, 0);
			gridBagConstraints1.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints1.gridy = 4;
			GridBagConstraints gridBagConstraints = new GridBagConstraints();
			gridBagConstraints.gridx = 2;
			gridBagConstraints.gridheight = 1;
			gridBagConstraints.gridwidth = 1;
			gridBagConstraints.ipady = 20;
			gridBagConstraints.insets = new Insets(7, 0, 5, 0);
			gridBagConstraints.anchor = GridBagConstraints.CENTER;
			gridBagConstraints.ipadx = 10;
			gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints.gridy = 1;
			panelBox = new JPanel();
			panelBox.setLayout(new GridBagLayout());
			panelBox.setPreferredSize(new Dimension(14, 150));
			panelBox.add(getBotonGuardar(), gridBagConstraints);
			panelBox.add(getBotonSalir(), gridBagConstraints1);
			panelBox.add(getBotonImprimir(), gridBagConstraints12);
		}
		return panelBox;
	}

	/**
	 * This method initializes botonGuardar
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBotonGuardar()
	{
		if (botonGuardar == null)
		{
			botonGuardar = new JButton();
			botonGuardar.setPreferredSize(new Dimension(80, 40));
			botonGuardar.setText("Guardar");

			botonGuardar.setIcon(new ImageIcon(getClass().getResource(
					"/iconos/save.gif")));

			botonGuardar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					cartaLocal.guardar(Main.m_Restaurante.getId());
					Seccion[] m_sec = cartaLocal.getSecciones();
					modeloSecciones = new DefaultListModel();
					for (int i = 0; m_sec != null && i < m_sec.length; i++)
					{
						modeloSecciones.addElement(m_sec[i].getNombreSeccion());
					}
					
					listaSecciones.setSelectedIndex(0);

					for (int i = listaProductos.getRowCount() - 1; i >= 0; listaProductos
							.removeRow(i--))
						;

					// Aquí cargamos todo la lista de productos de una
					// seccion

					if (listaSecciones.getSelectedIndex() != -1)
					{
						Seccion s = cartaLocal
								.buscarSeccion((String) modeloSecciones
										.getElementAt(listaSecciones
												.getSelectedIndex()));
						Producto p[] = s.getProductos();

						for (int i = 0; i < p.length; i++)
						{
							String linea[] = { p[i].consultarNombreProducto(),
									Float.toString(p[i].consultarPrecio()) };
							linea[1] += " €";
							listaProductos.insertRow(i, linea);
						}
					}
				}
			});
		}
		return botonGuardar;
	}

	/**
	 * This method initializes botonSalir
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBotonSalir()
	{
		if (botonSalir == null)
		{
			botonSalir = new JButton();
			botonSalir.setPreferredSize(new Dimension(80, 40));
			botonSalir.setText("Salir...");
			botonSalir.setIcon(new ImageIcon(getClass().getResource(
					"/iconos/door.png")));
			botonSalir.setPressedIcon(new ImageIcon(getClass().getResource(
					"/iconos/door_in.png")));
			botonSalir.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					framePpal.setEnabled(true);
					frameCarta.dispose();
				}
			});
		}
		return botonSalir;
	}

	/**
	 * This method initializes textPrecio
	 * 
	 * @return javax.swing.JTextField
	 */
	private JTextField getTextPrecio()
	{
		if (textPrecio == null)
		{
			textPrecio = new JTextField();
			textPrecio.setColumns(13);
			textPrecio.setEnabled(false);
		}
		return textPrecio;
	}

	/**
	 * This method initializes botonImprimir
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBotonImprimir()
	{
		if (botonImprimir == null)
		{
			botonImprimir = new JButton();
			botonImprimir.setPreferredSize(new Dimension(80, 60));
			botonImprimir.setFont(new Font("Dialog", Font.BOLD, 12));
			botonImprimir.setIcon(new ImageIcon(getClass().getResource(
					"/iconos/print.gif")));
			botonImprimir.setText("\nImprimir");
			botonImprimir
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e)
						{
							if (!modeloSecciones.isEmpty())
							{

								JOptionPane.showMessageDialog(null,
										"La impresión se está realizando...");

								cartaLocal.imprimir("");
							} else
							{
								JOptionPane.showMessageDialog(null,
										"La carta está vacia.",
										"Error Impresión",
										JOptionPane.ERROR_MESSAGE);
							}

						}
					});
		}
		return botonImprimir;
	}

	/**
	 * This method initializes dialogoNuevoProd
	 * 
	 * @return javax.swing.JDialog
	 */
	private JDialog getDialogoNuevoProd()
	{
		if (dialogoNuevoProd == null)
		{
			dialogoNuevoProd = new JDialog(getFrameCarta());
			dialogoNuevoProd.setSize(new Dimension(297, 200));
			dialogoNuevoProd.setTitle("Nuevo Producto");
			dialogoNuevoProd.setLocationRelativeTo(null);
			dialogoNuevoProd.setModal(true);
			dialogoNuevoProd.setResizable(false);
			dialogoNuevoProd.setContentPane(getPanelNuevoProd());
		}
		return dialogoNuevoProd;
	}

	/**
	 * This method initializes panelNuevoProd
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelNuevoProd()
	{
		if (panelNuevoProd == null)
		{
			simbEuro = new JLabel();
			simbEuro.setText("€");
			labelPNProd = new JLabel();
			labelPNProd.setText("Precio Producto:");
			FlowLayout flowLayout4 = new FlowLayout();
			flowLayout4.setAlignment(java.awt.FlowLayout.CENTER);
			flowLayout4.setVgap(15);
			flowLayout4.setHgap(13);
			labelNProd = new JLabel();
			labelNProd.setText("Nombre Producto:");
			panelNuevoProd = new JPanel();
			String tituloBorde = "Añadir a la sección \""
					+ textSeccion.getText() + "\"";
			panelNuevoProd.setBorder(BorderFactory.createTitledBorder(null,
					tituloBorde, TitledBorder.CENTER,
					TitledBorder.DEFAULT_POSITION, new Font("Dialog",
							Font.BOLD, 12), new Color(51, 51, 51)));
			panelNuevoProd.setLayout(flowLayout4);
			panelNuevoProd.add(labelNProd, null);
			panelNuevoProd.add(getTextNProd(), null);
			panelNuevoProd.add(labelPNProd, null);
			panelNuevoProd.add(getTextPNProd(), null);
			panelNuevoProd.add(simbEuro, null);
			panelNuevoProd.add(getBotonNProd(), null);
			panelNuevoProd.add(getBotonCNProd(), null);
		}
		return panelNuevoProd;
	}

	/**
	 * This method initializes textNProd
	 * 
	 * @return javax.swing.JTextField
	 */
	private JTextField getTextNProd()
	{
		if (textNProd == null)
		{
			textNProd = new JTextField();
			textNProd.setColumns(13);
		}
		return textNProd;
	}

	/**
	 * This method initializes botonNProd
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBotonNProd()
	{
		if (botonNProd == null)
		{
			botonNProd = new JButton();
			botonNProd.setText("Aceptar");
			botonNProd.setIcon(new ImageIcon(getClass().getResource(
					"/iconos/accept.png")));
			botonNProd.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					String prod[] = new String[2];
					prod[0] = textNProd.getText();
					prod[1] = textPNProd.getText();

					if ((prod[0] != null) && (prod[0].length() > 0))
					{
						// CORRECTO

						float precio;
						try
						{
							precio = Float.parseFloat(prod[1]);

						} catch (NumberFormatException ex)
						{
							precio = -1.0f;
						}

						if ((prod[1] != null) && (prod[1].length() > 0)
								&& (precio > 0))
						{

							// Y agregamos a su seccion
							Producto p = new Producto(-1, new Float(prod[1]),
									prod[0],

									"Si");

							cartaLocal.getSecciones()[listaSecciones
									.getSelectedIndex()].agregarProducto(p);

							prod[1] += " €";
							listaProductos.insertRow(listaProductos
									.getRowCount(), prod);
							textNProd.setText("");
							textPNProd.setText("0.00");
							dialogoNuevoProd.dispose();

						} else if (prod[1] != null || precio < 0)
						{
							JOptionPane
									.showMessageDialog(
											null,
											"Tiene que poner un precio correcto de producto",
											"Error", JOptionPane.ERROR_MESSAGE);
						}

					} else if (prod[0] != null)
					{
						JOptionPane.showMessageDialog(null,
								"Tiene que poner un nombre de producto",
								"Error", JOptionPane.ERROR_MESSAGE);
					}

				}
			});
		}
		return botonNProd;
	}

	/**
	 * This method initializes botonCNProd
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBotonCNProd()
	{
		if (botonCNProd == null)
		{
			botonCNProd = new JButton();
			botonCNProd.setText("Cancelar");

			botonCNProd.setIcon(new ImageIcon(getClass().getResource(
					"/iconos/cancel.png")));
			botonCNProd.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e)
				{

					textNProd.setText("");
					textPNProd.setText("0.00");
					dialogoNuevoProd.dispose();

				}
			});
		}
		return botonCNProd;
	}

	/**
	 * This method initializes textPNProd
	 * 
	 * @return javax.swing.JTextField
	 */
	private JTextField getTextPNProd()
	{
		if (textPNProd == null)
		{
			textPNProd = new JTextField();
			textPNProd.setColumns(5);

			textPNProd.setHorizontalAlignment(JTextField.RIGHT);
			textPNProd.setText("0.00");
		}
		return textPNProd;
	}

}

class ListaProductos extends DefaultTableModel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public boolean isCellEditable(int row, int column)
	{
		return false;
	}
}
